home *** CD-ROM | disk | FTP | other *** search
/ Collection of Tools & Utilities / Collection of Tools and Utilities.iso / basic / qbmouse.zip / MOUSE.BI < prev    next >
Text File  |  1993-06-29  |  14KB  |  276 lines

  1.  
  2.     ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
  3.     '                                     ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,    '
  4.     ' Robert Seace                        ; QB Mouse Support Routines ;    '
  5.     ' RFD 2  Box 229                      '''''''''''''''''''''''''''''    '
  6.     ' Littleton, NH  03561                  Feel free to distribute!       '
  7.     '                                                                      '
  8.     ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
  9.     '                        Filename: MOUSE.BI                            '
  10.     '   Include by using the "'$include: 'mouse.bi'" metacommand           '
  11.     ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
  12.       
  13.     ' Must include the assembly support routines in QB.BI
  14.     '$INCLUDE: 'qb.bi'
  15.  
  16.     ' Note: To use these routines, you must either link in the compiled
  17.     '       object code (MOUSE.OBJ) and the QB.LIB library, or simply use
  18.     '       the included MOUSE.LIB library.  At the linker's prompt for
  19.     '       libraries, type "mouse.lib" (actually, I would probably type
  20.     '       "bcom45.lib+mouse.lib", which would also link in the compile
  21.     '       time library to produce a stand-alone executable file, as well).
  22.     '       Using this MOUSE.LIB method, you need not bother to link in the
  23.     '       MOUSE.OBJ object code along with your own compiled object code,
  24.     '       nor do you need to link in the QB.LIB library, as it is already
  25.     '       contained within the MOUSE.LIB library.  Simply include MOUSE.BI
  26.     '       at the top of your code (use the "'$include: 'mouse.bi'"
  27.     '       metacommand; note that it must be within a comment, and there
  28.     '       should be only spaces/tabs next to the dollar sign, unless it
  29.     '       is put directly next to the FIRST single-quote (apostrophe)
  30.     '       marking the comment), then compile your code, and link it with
  31.     '       the MOUSE.LIB library, and you'll be all set.
  32.     '       If you want to use the mouse functions within the QB environment,
  33.     '       use the MOUSE.QLB QuickLibrary (start QB using the /L parameter:
  34.     '       "qb /L mouse").
  35.    
  36.     
  37.     ' Structures/types used by my functions:
  38.  
  39.     ' MouseEvent structure.  This stores the event information which is
  40.     ' returned by several of my functions, to indicate the position and
  41.     ' button status of the mouse.  To use such a function, just dimension
  42.     ' a variable as MouseEvent type (eg: "DIM event AS MouseEvent"), then
  43.     ' pass that variable to the function.  When the function/subroutine
  44.     ' returns, the MouseEvent variable that you passed it will be filled in
  45.     ' with the mouse info (dependent upon if there is a certain new event
  46.     ' in some functions), which you can then examine and use.
  47.     ' Note: The x and y positions of the mouse pointer are converted to
  48.     ' the appropriate positions for the screen size/mode which you specify
  49.     ' in MouseInit.  Eg: In text-mode (0), x would be between 1 and 80, and
  50.     ' y would be between 1 and 25.
  51.  
  52.     TYPE MouseEvent             ' Mouse event structure type
  53.         x AS INTEGER            ' column position of mouse
  54.         y AS INTEGER            ' row position of mouse
  55.         buttons AS INTEGER      ' button info: LEFT, RIGHT, and/or MIDDLE
  56.     END TYPE
  57.  
  58.     ' BitMap structure.  This is used for changing the shape of the graphics
  59.     ' mouse pointer with the MouseGraphicsPtr subroutine.  You need to
  60.     ' dimension a variable of type BitMap (eg: "DIM map AS BitMap") then
  61.     ' fill in all the bitmap info and pass it to MouseGraphicsPtr along
  62.     ' with the position of the hotspot (spot returned as the location of the
  63.     ' mouse pointer) within the bitmap.  The BitMap structure contains 2
  64.     ' separate bitmaps: a screen mask, and a cursor mask.  Each are 16 x 16
  65.     ' bitmaps (16 integers, each 16 bits long).  The screen mask is first
  66.     ' ANDed with what is on the screen where the pointer is going to appear,
  67.     ' then the cursor mask is XORed with the result of that.  If you want no
  68.     ' effect from the screen mask (a see-through type pointer), just set all
  69.     ' screen mask bits to 1 (16 integers all equal to NOT 0 or -1).  If you
  70.     ' want the pointer to be solid and over-write the objects on the screen,
  71.     ' set the screen mask bits to be the exact compliments of the cursor
  72.     ' (pointer) mask bits (set each screen mask integer to equal the NOT of
  73.     ' the corresponding cursor mask integer).  If you want solid over-writing
  74.     ' but with a black outline around the pointer (useful when a white
  75.     ' pointer is on top of a white patch of screen), then you have to do a
  76.     ' little work. ;-)  You need to set all bits that are 0 in the cursor
  77.     ' mask to 1 in the screen mask, EXCEPT for a single bit wherever a 1 bit
  78.     ' bit in the cursor mask meets a 0 bit; the screen mask bit corresponding
  79.     ' to that edge 0 bit should be set to 0, not 1 as per normal.  Of course,
  80.     ' the easiest way of dealing with all of this confusing bitmap stuff is
  81.     ' just to use my included bitmap editor to produce the bitmaps, all in
  82.     ' the correct form to use with my functions. ;-)  A few useful bitmaps
  83.     ' that are already made are included in a file called BITMAPS.TXT,
  84.     ' which you can Merge into your code for use, as well.
  85.  
  86.     TYPE BitMap                 ' Bitmap structure type
  87.         screen1 AS INTEGER
  88.         screen2 AS INTEGER
  89.         screen3 AS INTEGER
  90.         screen4 AS INTEGER
  91.         screen5 AS INTEGER
  92.         screen6 AS INTEGER
  93.         screen7 AS INTEGER
  94.         screen8 AS INTEGER      ' 16 integers (each 16 bits) to represent
  95.         screen9 AS INTEGER      ' the screen mask bitmap. (I suggest setting
  96.         screen10 AS INTEGER     ' all bits to 1 (-1 or NOT 0 in Basic's
  97.         screen11 AS INTEGER     ' method of storing integers) unless you
  98.         screen12 AS INTEGER     ' want a solid over-writing type pointer.)
  99.         screen13 AS INTEGER
  100.         screen14 AS INTEGER
  101.         screen15 AS INTEGER
  102.         screen16 AS INTEGER
  103.         ptr1 AS INTEGER
  104.         ptr2 AS INTEGER
  105.         ptr3 AS INTEGER
  106.         ptr4 AS INTEGER
  107.         ptr5 AS INTEGER
  108.         ptr6 AS INTEGER
  109.         ptr7 AS INTEGER
  110.         ptr8 AS INTEGER         ' 16 integers (each 16 bits) to represent
  111.         ptr9 AS INTEGER         ' the cursor mask bitmap. (This is the
  112.         ptr10 AS INTEGER        ' actual bitmap which determines the shape
  113.         ptr11 AS INTEGER        ' of the mouse pointer.)
  114.         ptr12 AS INTEGER
  115.         ptr13 AS INTEGER
  116.         ptr14 AS INTEGER
  117.         ptr15 AS INTEGER
  118.         ptr16 AS INTEGER
  119.     END TYPE
  120.  
  121.     
  122.     ' Set default type for my Mouse functions (beginning with "M"): Integer.
  123.  
  124.     DEFINT M
  125.  
  126.     ' The following functions/subroutines are available for use:
  127.  
  128.     ' ---------------------------=< MouseInit >=---------------------------
  129.     ' Function which initializes the mouse for use.  The argument passed
  130.     ' should be 0 for normal text-mode (80 columns X 25 rows) screen, or
  131.     ' 1 for graphics-mode resolution 1 (320 X 200), or 2 for graphics-mode
  132.     ' resolution 2 (640 X 200; same as mouse's own virtual screen).  The
  133.     ' return value is 0 if no mouse is available for use, otherwise it is
  134.     ' the number of buttons available on the mouse.
  135.     
  136.     DECLARE FUNCTION MouseInit (mode AS INTEGER)
  137.     
  138.     ' ---------------------------=< MouseSetPos >=-------------------------
  139.     ' Sets the position of the mouse pointer.  The x argument is the column
  140.     ' to move to, and the y argument is the row to move to.  (Range of
  141.     ' legal values determined by screen mode, as set by MouseInit.  For
  142.     ' text-mode 0: x is 1 - 80, y is 1 - 25.  For graphics-mode 1: x is
  143.     ' 0 - 319, y is 0 - 199.  For graphics-mode 2: x is 0 - 639, y is
  144.     ' 0 - 199.)
  145.     
  146.     DECLARE SUB MouseSetPos (x AS INTEGER, y AS INTEGER)
  147.     
  148.     ' ----------------------------=< MouseHide >=--------------------------
  149.     ' Hides the mouse pointer (shuts it off).  I advise hiding before every
  150.     ' CLS, then turning it back on with MouseShow after screen is fully
  151.     ' drawn (especially if changing screen color).
  152.     
  153.     DECLARE SUB MouseHide ()
  154.     
  155.     ' ----------------------------=< MouseShow >=--------------------------
  156.     ' Shows the mouse pointer (turns it on).  See comments for MouseHide.
  157.     ' Pointer is turned on initially by MouseInit.
  158.     
  159.     DECLARE SUB MouseShow ()
  160.     
  161.     ' ---------------------------=< MouseMove >=---------------------------
  162.     ' Detects whether or not t